package br.com.nomeempresa.locadora.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import br.com.nomeempresa.locadora.app.Principal;
import br.com.nomeempresa.locadora.dao.FornecedorDAO;
import br.com.nomeempresa.locadora.modelo.TabelaFornecedor;
import br.com.nomeempresa.locadora.modelo.Fornecedor;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class FornecedorController implements Initializable {

    @FXML
    private TableView<TabelaFornecedor> tabelaFornecedor;

    @FXML
    private TableColumn clCodigo;

    @FXML
    private TableColumn clNome;

    @FXML
    private TableColumn clRazao;

    @FXML
    private TableColumn clCNPJ;

    @FXML
    private TableColumn clTelefone;

    @FXML
    private TextField txCodigo;

    @FXML
    private TextField txNome;

    @FXML
    private TextField txRazao;

    @FXML
    private TextField txCNPJ;

    @FXML
    private TextField txTelefone;

    @FXML
    private Button btVoltar;

    @FXML
    private Button btLimpar;

    @FXML
    private Button btEditar;

    @FXML
    private Button btExcluir;

    @FXML
    private Button btSalvar;

    @FXML
    void eventEditar(ActionEvent event) {
    	IntegerProperty cdFornecedor = tabelaFornecedor.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	FornecedorDAO dao = new FornecedorDAO();
    	Fornecedor fSalvo = dao.listarPorId(cdFornecedor.intValue());
    	txCodigo.setText(String.valueOf(fSalvo.getCodigo()));
    	txNome.setText(fSalvo.getNome());
    	txRazao.setText(fSalvo.getRazaoSocial());
    	txCNPJ.setText(fSalvo.getCnpj());
    	txTelefone.setText(fSalvo.getTelefone());
    }

    @FXML
    void eventExcluir(ActionEvent event) {
    	int linhaSelecionada = tabelaFornecedor.getSelectionModel().getSelectedIndex();
    	IntegerProperty cdFornecedor = tabelaFornecedor.getSelectionModel().getSelectedItem().codigoProperty();
    	FornecedorDAO dao = new FornecedorDAO();
    	dao.excluir(cdFornecedor.intValue());
    	tabelaFornecedor.getItems().remove(linhaSelecionada);
    }

    @FXML
    void eventSalvar(ActionEvent event) {
    	Fornecedor f = new Fornecedor();
    	f.setNome(txNome.getText());
    	f.setRazaoSocial(txRazao.getText());
    	f.setCnpj(txCNPJ.getText());
    	f.setTelefone(txTelefone.getText());
    	FornecedorDAO dao = new FornecedorDAO();
    	
    	if(!txCodigo.getText().trim().equals("")){
    		f.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(f);
    	}else{
    		dao.inserir(f);    		
    	}
		carregarTabela();
		limparDados();
    }

    @FXML
    void eventLimpar(ActionEvent event) {
    	limparDados();
    }
    
    @FXML
    void eventVoltar(ActionEvent event) {
    	try{
    		Parent root = FXMLLoader.load(getClass().getResource("/br/com/nomeempresa/locadora/view/Principal.fxml"));
    		Principal.scene.setRoot(root);
    	}catch(IOException ex){
    		ex.printStackTrace();
    	}
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		carregarTabela();
	}

	private void carregarTabela() {
		FornecedorDAO dao = new FornecedorDAO();
		List<Fornecedor> fornecedores = dao.listar();
		ObservableList<TabelaFornecedor> dados = FXCollections.observableArrayList();
		
		for(Fornecedor f: fornecedores){
			dados.add(new TabelaFornecedor(f));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory("nome"));
		clRazao.setCellValueFactory(new PropertyValueFactory("razao"));
		clCNPJ.setCellValueFactory(new PropertyValueFactory("cnpj"));
		clTelefone.setCellValueFactory(new PropertyValueFactory("telefone"));
		tabelaFornecedor.setItems(dados);
	}
	
	public void limparDados() {
    	txCodigo.setText("");
    	txNome.setText("");
    	txRazao.setText("");
    	txCNPJ.setText("");
    	txTelefone.setText("");
	}
}
